home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / fortran / linpklib.zip / SPBDI.FOR < prev    next >
Text File  |  1984-01-06  |  2KB  |  67 lines

  1.       SUBROUTINE SPBDI(ABD,LDA,N,M,DET)
  2.       INTEGER LDA,N,M
  3.       REAL ABD(LDA,1)
  4.       REAL DET(2)
  5. C
  6. C     SPBDI COMPUTES THE DETERMINANT
  7. C     OF A REAL SYMMETRIC POSITIVE DEFINITE BAND MATRIX
  8. C     USING THE FACTORS COMPUTED BY SPBCO OR SPBFA.
  9. C     IF THE INVERSE IS NEEDED, USE SPBSL  N  TIMES.
  10. C
  11. C     ON ENTRY
  12. C
  13. C        ABD     REAL(LDA, N)
  14. C                THE OUTPUT FROM SPBCO OR SPBFA.
  15. C
  16. C        LDA     INTEGER
  17. C                THE LEADING DIMENSION OF THE ARRAY  ABD .
  18. C
  19. C        N       INTEGER
  20. C                THE ORDER OF THE MATRIX  A .
  21. C
  22. C        M       INTEGER
  23. C                THE NUMBER OF DIAGONALS ABOVE THE MAIN DIAGONAL.
  24. C
  25. C     ON RETURN
  26. C
  27. C        DET     REAL(2)
  28. C                DETERMINANT OF ORIGINAL MATRIX IN THE FORM
  29. C                DETERMINANT = DET(1) * 10.0**DET(2)
  30. C                WITH  1.0 .LE. DET(1) .LT. 10.0
  31. C                OR  DET(1) .EQ. 0.0 .
  32. C
  33. C     LINPACK.  THIS VERSION DATED 08/14/78 .
  34. C     CLEVE MOLER, UNIVERSITY OF NEW MEXICO, ARGONNE NATIONAL LAB.
  35. C
  36. C     SUBROUTINES AND FUNCTIONS
  37. C
  38. C
  39. C     INTERNAL VARIABLES
  40. C
  41.       REAL S
  42.       INTEGER I
  43. C
  44. C     COMPUTE DETERMINANT
  45. C
  46.       DET(1) = 1.0E0
  47.       DET(2) = 0.0E0
  48.       S = 10.0E0
  49.       DO 50 I = 1, N
  50.          DET(1) = ABD(M+1,I)**2*DET(1)
  51. C     ...EXIT
  52.          IF (DET(1) .EQ. 0.0E0) GO TO 60
  53.    10    IF (DET(1) .GE. 1.0E0) GO TO 20
  54.             DET(1) = S*DET(1)
  55.             DET(2) = DET(2) - 1.0E0
  56.          GO TO 10
  57.    20    CONTINUE
  58.    30    IF (DET(1) .LT. S) GO TO 40
  59.             DET(1) = DET(1)/S
  60.             DET(2) = DET(2) + 1.0E0
  61.          GO TO 30
  62.    40    CONTINUE
  63.    50 CONTINUE
  64.    60 CONTINUE
  65.       RETURN
  66.       END
  67.